//package com.example.springbooteasycode.utils.tablepdf;
//
//import com.aspose.words.Document;
//import com.aspose.words.License;
//import com.aspose.words.PdfSaveOptions;
//import com.aspose.words.SaveFormat;
//import org.apache.poi.xwpf.usermodel.*;
//import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
//import org.springframework.core.io.ClassPathResource;
//
//import java.io.FileInputStream;
//import java.io.FileOutputStream;
//import java.io.IOException;
//import java.io.InputStream;
//import java.math.BigInteger;
//import java.util.Objects;
//
///**
// * 生成问卷报告word文件，并且转换为pdf
// *    TODO---测试问卷pdf最终版本
// *
// * poi + aspose-words
// *
// * @author Csa
// * @date 2024/10/22 15:45
// */
//public class DemoFinally {
//    public static void main(String[] args) throws IOException {
//        XWPFDocument document = new XWPFDocument();
//
//
//        // 设置问卷基础信息表格
////        questionnaireInfoTableToDocument(document);
//
//        // 统计结果
////        questionnaireStatisticalResults(document);
//        questionnaireStatisticalResultsV2(document);
//
//        // 添加单选题表格
//        addSingleChoiceTableToDocument(document);
//        addSingleChoiceTableToDocument(document);
//        addSingleChoiceTableToDocument(document);
//
//        // 填空题
//        addFillBlankTableToDocument(document);
//        addFillBlankTableToDocumentV2(document);
//
//
//        // 输出到文件
//        try (FileOutputStream out = new FileOutputStream("/Users/boykchen/Desktop/demoFinally.docx")) {
//            document.write(out);
//        }
//
//        wordToPdf();
//
//    }
//
//    private static void addFillBlankTableToDocumentV2(XWPFDocument document) {
//
//        XWPFTable table  = null;
//        table = document.createTable(4, 4);
//
//        fillTableHead(table);
////
////        // ============合并单元格，合并第一行的两个单元格==========
////        XWPFTableCell cell = table.getRow(1).getCell(0);
////        setTableCellStyleHead15Width8300(cell,"暂无数据");
////        // 合并后居中
////        mergeCellsHorizontal(table,1,0,3);
//
//        //
//        setTableCellStyleHead15(table.getRow(1).getCell(0),String.valueOf(2));
//        setTableCellStyleHead15(table.getRow(1).getCell(1),"张三");
//        setTableCellStyleHead15(table.getRow(1).getCell(2),"13300000606" );
////        setTableCellStyleContent15NoWidth(table.getRow(1).getCell(3),"一去二三里，烟村四五家。亭台六七座，八九十枝花");
////        String newstr = "一去二三里，烟村四五家。亭台六七座，八九十枝花";
//        String newstr = "一去二三十枝花";
//
//        // 根据8个字段自动加换行符号
//// 根据8个字段自动加换行符号
//        String formattedStr = insertNewlines(newstr, 8);
//
//        setTableCellStyleContent15NoWidth(table.getRow(1).getCell(3),formattedStr);
//
//
//        setTableCellStyleHead15(table.getRow(2).getCell(0),String.valueOf(80));
//        setTableCellStyleHead15(table.getRow(2).getCell(1),"张三哈哈哈9");
//        setTableCellStyleHead15(table.getRow(2).getCell(2),"13300000606" );
////        setTableCellStyleContent15NoWidth(table.getRow(1).getCell(3),"一去二三里，烟村四五家。亭台六七座，八九十枝花");
////        String newstr = "一去二三里，烟村四五家。亭台六七座，八九十枝花";
//        String newstr1 = "一去二三十枝花";
//
//        // 根据8个字段自动加换行符号
//// 根据8个字段自动加换行符号
//        String formattedStr1 = insertNewlines(newstr1, 8);
//
//        setTableCellStyleContent15NoWidth(table.getRow(2).getCell(3),formattedStr1);
//
//
//
//
//        setTableCellStyleHead15(table.getRow(3).getCell(0),String.valueOf(190));
//
//        String newstr8 = "张三哈哈哈9302898哈哈哈哈哈哈";
////        String newstr8 = "13300000606";
//
//
//        String formattedStr8 = insertNewlines(newstr8, 8);
//
//        setTableCellStyleHead15(table.getRow(3).getCell(1),formattedStr8);
//        setTableCellStyleHead15(table.getRow(3).getCell(2),"13300000606" );
////        setTableCellStyleContent15NoWidth(table.getRow(1).getCell(3),"一去二三里，烟村四五家。亭台六七座，八九十枝花");
////        String newstr = "一去二三里，烟村四五家。亭台六七座，八九十枝花";
//        String newstr2 = "一去二三十枝花一去二三里，烟村四五家。亭台六七座，八九十枝花";
//
//        // 根据8个字段自动加换行符号
//// 根据8个字段自动加换行符号
//        String formattedStr2 = insertNewlines(newstr2, 10);
//
//        setTableCellStyleContent15NoWidth(table.getRow(3).getCell(3),formattedStr2);
//
//
//
//    }
//
//    /**
//     * 根据指定的字符数自动在字符串中添加换行符。
//     *
//     * @param input  原始字符串
//     * @param charCount 每行的最大字符数
//     * @return 添加了换行符的新字符串
//     */
//    public static String insertNewlines(String input, int charCount) {
//        if (input == null || input.isEmpty() || charCount <= 0) {
//            return input;
//        }
//
//        StringBuilder sb = new StringBuilder();
//        int length = input.length();
//
//        for (int i = 0; i < length; i += charCount) {
//            int end = Math.min(i + charCount, length);
//            sb.append(input, i, end);
//            if (end < length) {
//                sb.append("\n"); // 添加换行符
//            }
//        }
//
//        return sb.toString();
//    }
//
//    private static void setTableCellStyleHead15Width8300(XWPFTableCell cell, String title) {
//        setTableCellStyleHead(cell, title, 15, 8300);
//    }
//
//    /**
//     * 设置TableCell-表头样式
//     *
//     * @param cell 单元格
//     * @param title 标题
//     * @param fontSize 字体大小
//     * @param width 宽度（单位为DXA）
//     */
//    private static void setTableCellStyleHeadNew(XWPFTableCell cell, String title, Integer fontSize, Integer width) {
//        // 垂直对齐
//        cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
//        // 设置颜色rgb值
//        cell.setColor("f7f8fa");
//        // 水平对齐
//        cell.getParagraphs().get(0).setAlignment(ParagraphAlignment.CENTER);
//
//        // 设置单元格宽度
//        CTTblWidth ctTblWidth = cell.getCTTc().addNewTcPr().addNewTcW();
//        ctTblWidth.setW(BigInteger.valueOf(width));
//        ctTblWidth.setType(STTblWidth.DXA);
//
//        // 设置单元格样式
//        XWPFParagraph paragraph = cell.getParagraphs().get(0);
//
//        if (paragraph == null) {
//            paragraph = cell.addParagraph();
//        }
//        XWPFRun run = paragraph.createRun();
//        run.setText(title);
//        // 设置字体大小
//        run.setFontSize(fontSize);
//        run.setColor("909399");
//        run.setFontFamily("Microsoft YaHei");
//    }
//
//
////    /**
////     * word单元格列合并，并设置合并后的单元格内容居中
////     *
////     * @param table 表格
////     * @param row 合并列所在行
////     * @param startCell 开始列
////     * @param endCell 结束列
////     */
////    public static void mergeCellsHorizontal(XWPFTable table, int row, int startCell, int endCell) {
////        XWPFTableRow tableRow = table.getRow(row);
////        if (tableRow == null) {
////            return;
////        }
////
////        for (int i = startCell; i <= endCell; i++) {
////            XWPFTableCell cell = tableRow.getCell(i);
////            if (cell == null) {
////                continue;
////            }
////            if (i == startCell) {
////                // The first merged cell is set with RESTART merge value
////                cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
////
////                // 设置起始单元格的内容居中
////                CTP ctp = cell.getParagraphs().get(0).getCTP();
////                CTJc ctjc = ctp.addNewPPr().addNewJc();
////                ctjc.setVal(org.apache.xmlbeans.XmlCursor.TokenType.CENTER); // 居中对齐
////            } else {
////                // Cells which join (merge) the first one, are set with CONTINUE
////                cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
////
////                // 清除这些单元格的内容以避免显示重复内容
////                while (cell.getParagraphs().size() > 0) {
////                    cell.removeParagraph(0);
////                }
////            }
////        }
////    }
//
//    /**
//     * word单元格列合并
//     * @param table 表格
//     * @param row 合并列所在行
//     * @param startCell 开始列
//     * @param endCell 结束列
//     * @date 2020年4月8日 下午4:43:54
//     */
//    public static void mergeCellsHorizontal(XWPFTable table, int row, int startCell, int endCell) {
//        for (int i = startCell; i <= endCell; i++) {
//            XWPFTableCell cell = table.getRow(row).getCell(i);
//            if (i == startCell) {
//                // The first merged cell is set with RESTART merge value
//                cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
//            } else {
//                // Cells which join (merge) the first one, are set with CONTINUE
//                cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
//            }
//        }
//    }
//
//
//    private static void fillTableHead(XWPFTable table){
//        // common-设置表头
//        XWPFTableRow row = table.getRow(0);
//        row.setHeight(120);
//        XWPFTableCell cell00 = row.getCell(0);
//        setTableCellStyleHead15(cell00, "ID");
////        setTableCellStyleHeadNew(cell00, "ID",15,2000);
//
//        XWPFTableRow row1 = table.getRow(0);
//        row1.setHeight(120);
//        XWPFTableCell cell10 = row1.getCell(1);
//        setTableCellStyleHead15(cell10, "姓名");
//
////        setTableCellStyleHeadNew(cell10, "姓名",15,2000);
//
//        XWPFTableRow row2 = table.getRow(0);
//        row2.setHeight(120);
//        XWPFTableCell cell20 = row2.getCell(2);
//        setTableCellStyleHead15(cell20, "手机号");
//
////        setTableCellStyleHeadNew(cell20, "手机号",15,2000);
//
//        XWPFTableRow row3 = table.getRow(0);
//        row3.setHeight(120);
//        XWPFTableCell cell30 = row3.getCell(3);
//        setTableCellStyleHead15(cell30, "内容");
//
////        setTableCellStyleHeadNew(cell30, "内容",15,2000);
//
//    }
//
//    private static void addFillBlankTableToDocument(XWPFDocument document) {
//        // 空格换行
//        XWPFParagraph paragraph = document.createParagraph();
//
//        XWPFParagraph singleChoiceTitleParagraph = document.createParagraph();
//        XWPFRun run = singleChoiceTitleParagraph.createRun();
//        run.setText("3.你对物业的意见和建议");
//        // 设置字体大小为15
//        run.setFontSize(15);
//        // 字体颜色#303133
//        run.setColor("303133");
//        run.setFontFamily("Microsoft YaHei");
//
//
//        // 空格换行
//        XWPFParagraph singleChoiceTitleParagraph2 = document.createParagraph();
//
//        XWPFRun run2 = singleChoiceTitleParagraph2.createRun();
//        run2.setText("   "+"共1份数据");
//        // 设置字体大小为15
//        run2.setFontSize(15);
//        // 字体颜色#303133
//        run2.setColor("303133");
//        run.setFontFamily("Microsoft YaHei");
//
//
//
//    }
//
//    private static void questionnaireInfoTableToDocument(XWPFDocument document) {
//        // 实现问卷基础信息表格的创建
//        XWPFTable table = document.createTable(4, 2);
//
//        // 设置表格的列宽
//        table.getCTTbl().addNewTblPr().addNewTblW().setW(BigInteger.valueOf(8300)); // 总宽度为5000
//
//        // 设置名称
//        XWPFTableRow row = table.getRow(0);
//        row.setHeight(120);
//        XWPFTableCell cell00 = row.getCell(0);
//        setTableCellStyleHead20(cell00, "名称");
//
//        XWPFTableCell cell01 = row.getCell(1);
//        setTableCellStyleContent20(cell01, "物业服务满意度2024年度调查");
//
//        // 设置时间
//        XWPFTableRow row1 = table.getRow(1);
//        row1.setHeight(120);
//        XWPFTableCell cell10 = row1.getCell(0);
//        setTableCellStyleHead20(cell10, "时间");
//
//        XWPFTableCell cell11 = row1.getCell(1);
//        setTableCellStyleContent20(cell11, "2024-10-12 16:41:06至 2024-10-14 09:12:14");
//
//        // 设置发布者
//        XWPFTableRow row2 = table.getRow(4);
//        row2.setHeight(120);
//        XWPFTableCell cell20 = row2.getCell(0);
//        setTableCellStyleHead20(cell20, "发布者");
//
//        XWPFTableCell cell21 = row2.getCell(1);
//        setTableCellStyleContent20(cell21, "新物业");
//
//        // 设置收集数
//        XWPFTableRow row3 = table.getRow(5);
//        row3.setHeight(120);
//        XWPFTableCell cell30 = row3.getCell(0);
//        setTableCellStyleHead20(cell30, "收集数");
//
//        XWPFTableCell cell31 = row3.getCell(1);
//        setTableCellStyleContent20(cell31, "4份");
//
//    }
//
//    private static void questionnaireStatisticalResults(XWPFDocument document) {
//        XWPFParagraph paragraph = document.createParagraph();
//        XWPFRun run = paragraph.createRun();
//        run.setText("统计结果");
//        // 设置字体大小为15
//        run.setFontSize(15);
//        // 字体颜色#303133
//        run.setColor("303133");
////        run.setFontFamily("Arial");
//
//        run.addBreak(); // 插入空白行
//
//        XWPFRun run2 = paragraph.createRun();
//        run2.setText("物业服务满意度2024年度调查收集已完成，共4题，有效收集份数：4份，收集时间：2024-10-12 16:41:06至2024-10-14 09:12:14");
//        // 设置字体大小为13
//        run2.setFontSize(13);
//        // 字体颜色#606266
//        run2.setColor("606266");
//    }
//    private static void questionnaireStatisticalResultsV2(XWPFDocument document) {
//        XWPFParagraph paragraph = document.createParagraph();
////        XWPFRun run = paragraph.createRun();
////        run.addBreak(); // 插入空白行
//
//        // 实现问卷基础信息表格的创建
//        XWPFTable table = document.createTable(2, 1);
//
//        // 设置表格的列宽
//        table.getCTTbl().addNewTblPr().addNewTblW().setW(BigInteger.valueOf(8300)); // 总宽度为5000
//
//        // 设置统计结果title
//        XWPFTableRow row = table.getRow(0);
//        row.setHeight(120);
//        XWPFTableCell cell00 = row.getCell(0);
//        setTableCellStyleHead20(cell00, "统计结果");
//
//        // 设置统计结果内容
//        XWPFTableRow row1 = table.getRow(1);
//        row1.setHeight(120);
//        XWPFTableCell cell10 = row1.getCell(0);
//        setTableCellStyleContent20(cell10, "物业服务满意度2024年度调查收集已完成，共4题，有效收集份数：4份，收集时间：2024-10-12 16:41:06至2024-10-14 09:12:14");
//
//    }
//
//    private static void addSingleChoiceTableToDocument(XWPFDocument document) {
//        // 空格换行
//        XWPFParagraph paragraph = document.createParagraph();
//
//        XWPFParagraph singleChoiceTitleParagraph = document.createParagraph();
//        XWPFRun run = singleChoiceTitleParagraph.createRun();
//        run.setText("1. 卫生满意度【单选题】");
//        // 设置字体大小为15
//        run.setFontSize(15);
//        // 字体颜色#303133
//        run.setColor("303133");
//
//        XWPFRun run2 = singleChoiceTitleParagraph.createRun();
//        run2.setText("5分");
//        // 设置字体大小为13
//        run2.setFontSize(14);
//        // 字体颜色#126DF7
//        run2.setColor("126DF7");
//
//        // 实现单选题表格的创建
//        XWPFTable table = document.createTable(4, 3);
//
//        // 设置表格的列宽
//        table.getCTTbl().addNewTblPr().addNewTblW().setW(BigInteger.valueOf(8300)); // 总宽度为5000
//
//        // common-设置表头
//        XWPFTableRow row = table.getRow(0);
//        row.setHeight(120);
//        XWPFTableCell cell00 = row.getCell(0);
////        CTTblWidth cellWidth = cell00.getCTTc().addNewTcPr().addNewTcW();
////        cellWidth.setW(BigInteger.valueOf(1000));
//        setTableCellStyleHead15(cell00, "选项");
//
//        XWPFTableRow row1 = table.getRow(0);
//        row1.setHeight(120);
//        XWPFTableCell cell10 = row1.getCell(1);
//        setTableCellStyleHead15(cell10, "小计");
//
//        XWPFTableRow row2 = table.getRow(0);
//        row2.setHeight(120);
//        XWPFTableCell cell20 = row2.getCell(2);
//        setTableCellStyleHead15(cell20, "比例");
//
//        // 设置非常满意行
//        setTableCellStyleContent15(table.getRow(1).getCell(0), "非常满意");
//        setTableCellStyleContent15(table.getRow(1).getCell(1), "0");
//        setTableCellStyleContent15(table.getRow(1).getCell(2), "0%");
//
//        // 设置满意行
//        setTableCellStyleContent15(table.getRow(2).getCell(0), "满意");
//        setTableCellStyleContent15(table.getRow(2).getCell(1), "2");
//        setTableCellStyleContent15(table.getRow(2).getCell(2), "50%");
//
//        // 设置不满意行
//        setTableCellStyleContent15(table.getRow(3).getCell(0), "不满意");
//        setTableCellStyleContent15(table.getRow(3).getCell(1), "2");
//        setTableCellStyleContent15(table.getRow(3).getCell(2), "50%");
//
//    }
//
//    /**
//     * 设置表格样式：居中
//     */
//    private static void setTableStyle(XWPFTable table) {
//        //设置表格的样式
//        table.setTableAlignment(TableRowAlign.CENTER);
//    }
//
//    private static void setTableCellStyleHead15(XWPFTableCell cell, String title) {
//        setTableCellStyleHead(cell, title, 15, 3000);
//    }
//
//    private static void setTableCellStyleHead20(XWPFTableCell cell, String title) {
//        setTableCellStyleHead(cell, title, 20, 2000);
//    }
//
//    /**
//     * 设置TableCell-表头样式
//     *
//     * @param cell
//     */
//    private static void setTableCellStyleHead(XWPFTableCell cell, String title, Integer fontSize, Integer width) {
//        // 垂直对齐
//        cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
//        // 设置颜色rgb值
//        cell.setColor("f7f8fa");
//        // 水平对齐
//        cell.getParagraphs().get(0).setAlignment(ParagraphAlignment.CENTER);
//
//        // 设置单元格宽度
//        CTTblWidth ctTblWidth = cell.getCTTc().addNewTcPr().addNewTcW();
//        ctTblWidth.setW(BigInteger.valueOf(width));
//        //设置宽度的度量单位为 DXA，即字符单位。
//        ctTblWidth.setType(STTblWidth.DXA);
//
//        //设置单元格样式
//        XWPFParagraph paragraph = cell.getParagraphs().get(0);
//
//        if (paragraph == null) {
//            paragraph = cell.addParagraph();
//        }
//        XWPFRun run = paragraph.createRun();
//        run.setText(title);
//        // 设置字体大小
//        run.setFontSize(fontSize);
//        run.setColor("909399");
//        run.setFontFamily("Microsoft YaHei");
//
//    }
//
//    private static void setTableCellStyleContent15(XWPFTableCell cell, String value) {
//        setTableCellStyleContent(cell, value, 15, 3000);
//    }
//
//    private static void setTableCellStyleContent15NoWidth(XWPFTableCell cell, String value) {
//        setTableCellStyleContent(cell, value, 15, null);
//    }
//
//    private static void setTableCellStyleContent20(XWPFTableCell cell, String value) {
//        setTableCellStyleContent(cell, value, 20, null);
//    }
//
//    /**
//     * 设置TableCell-内容样式
//     *
//     * @param cell
//     */
//    private static void setTableCellStyleContent(XWPFTableCell cell, String value, Integer fontSize, Integer width) {
//        cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
//        cell.getParagraphs().get(0).setAlignment(ParagraphAlignment.CENTER);
//
//        // 设置单元格宽度
//        if (Objects.nonNull(width)) {
//            CTTblWidth ctTblWidth = cell.getCTTc().addNewTcPr().addNewTcW();
//            ctTblWidth.setW(BigInteger.valueOf(width));
//            //设置宽度的度量单位为 DXA，即字符单位。
//            ctTblWidth.setType(STTblWidth.DXA);
//        }
//
//        //设置单元格样式
//        XWPFParagraph paragraph = cell.getParagraphs().get(0);
//        if (paragraph == null) {
//            paragraph = cell.addParagraph();
//        }
//        XWPFRun run = paragraph.createRun();
//        run.setText(value);
//        // 设置字体大小为13
//        run.setFontSize(fontSize);
//    }
//
//    private static void wordToPdf() throws IOException {
//
//        String inputFilePath = "/Users/boykchen/Desktop/demoFinally.docx";
//        String outputFilePath = "/Users/boykchen/Desktop/wordToPdfDemoFinally.pdf";
//
//        try (FileInputStream fis = new FileInputStream(inputFilePath);
//             FileOutputStream fos = new FileOutputStream(outputFilePath)) {
//
//            // 设置 Aspose.Words 许可证
//            ClassPathResource resource = new ClassPathResource("license.xml");
//            InputStream licenseStream = resource.getInputStream();
//            // 设置 Aspose.Words 许可证
//            License license = new License();
//            license.setLicense(licenseStream);
//
//            // 加载Word文档
//            Document doc = new Document(fis);
//
//            // 设置PDF保存选项（可选）
//            PdfSaveOptions saveOptions = new PdfSaveOptions();
//            // 可以在这里设置各种PDF保存选项，例如压缩级别、图像质量等
//            // saveOptions.setCompression(PdfImageCompression.JPEG);
//            // saveOptions.setImageQuality(90);
//
//            // 转换为PDF并保存
//            doc.save(fos, SaveFormat.PDF);
//
//            System.out.println("Word to PDF conversion completed successfully.");
//
//        } catch (IOException e) {
//            e.printStackTrace();
//        } catch (Exception e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//}
